#ifndef STATUSOBJECT_H_
#define STATUSOBJECT_H_

#include "Element.h"

/**
 * \class StatusElement
 * \brief a class structure which stores one instance of one type of data. And allows 1 way communication
 *
 * A StatusElement is designed to present some relevant status of an experiment to the end-user,
 * i.e. one-way communication.  The class has no non-virtual methods and each daughter class redefines
 * only the methods which it will deal with, thus error messages are output if a StatusElement is accessed
 * incorrectly.
 *
 * All methods within StatusElement and it's derived classes are designed to be used internally.
 * If a module uses them, there is not provision to register these objects with ModuleHandler
 * and so the server cannot display them.
 */
class StatusElement: public Element {
public:
	StatusElement();
	virtual ~StatusElement();

	virtual void setValueString(std::string newStringValue);
	virtual void setValueInt(long newIntValue);
	virtual void setValueDouble(double newDoubleValue);
	virtual void setValueBool(bool newBoolValue);

	virtual std::string getValueString();
	virtual long getValueInt();
	virtual double getValueDouble();
	virtual bool getValueBool();

	virtual void setValue(void* newValue) = 0;

private:
	/**
	 * \brief first piece of the error message
	 */
	std::string s1;
	/**
	 *\brief second piece of the error message
	 */
	std::string s2;
};

#endif /* STATUSOBJECT_H_ */
